Is `List<Dog>` a subclass of `List<Animal>`? Why aren't Java's generics implicitly polymorphic?
Posted
by
froadie
on Stack Overflow
See other posts from Stack Overflow
or by froadie
Published on 2010-04-30T14:39:39Z
Indexed on
2012/12/04
11:09 UTC
Read the original article
Hit count: 251
I'm a bit confused about how Java generics handle inheritance / polymorphism.
Assume the following hierarchy -
Animal (Parent)
Dog - Cat (Children)
So suppose I have a method doSomething(List<Animal> animals)
. By all the rules of inheritance and polymorphism, I would assume that a List<Dog>
is a List<Animal>
and a List<Cat>
is a List<Animal>
- and so either one could be passed to this method. Not so. If I want to achieve this behavior, I have to explicitly tell the method to accept a list of any subset of Animal by saying doSomething(List<? extends Animal> animals)
.
I understand that this is Java's behavior. My question is why? Why is polymorphism generally implicit, but when it comes to generics it must be specified?
© Stack Overflow or respective owner